package router

import (
	"net/http"

	"gitee.com/shiwjlinux/blog-web/controller"
	"gitee.com/shiwjlinux/blog-web/middleware"
	"github.com/gin-gonic/gin"
)

// StartRouter 函数用于启动路由
func StartRouter() {
	// 创建一个默认的gin路由
	r := gin.Default()
	// 使用中间件，允许跨域访问
	r.Use(middleware.Cors())

	// 创建一个路由组，路径为/api
	base := r.Group("/api")
	{
		{
			// 测试接口
			base.GET("/test", func(ctx *gin.Context) {
				ctx.JSON(http.StatusOK, gin.H{
					"msg": "成功访问后端",
				})
			})

			// 注册接口
			base.POST("/register", controller.Register) // 注册
			// 登录接口
			base.POST("/login", controller.Login) // 登录
			// github登录接口
			base.GET("/login/github", controller.LoginWithGithub) // github登录
		}

		// 分类接口
		category := base.Group("/category")
		{
			// 获取分类信息
			category.GET("/:id", controller.Getcategory)
			// 获取分类下的文章列表
			category.GET("/:id/list", controller.GetArticleListByCategory)
		}

		// 标签接口
		tag := base.Group("/tag")
		{
			// 获取标签信息
			tag.GET("/:id", controller.GetTag)
			// 获取标签下的文章列表
			tag.GET("/:id/list", controller.GetArticleListByTag)
		}

		// 文章接口
		article := base.Group("/article")
		{
			// 获取文章信息
			article.GET("/:id", controller.GetArticle)
			// 获取文章下的评论列表
			article.GET("/:id/comment", controller.GetCommentListByArticle)
			// 获取文章下的标签
			article.GET("/:id/tag", controller.GetTagByArticle)
			// 获取文章下的标签ID
			article.GET("/:id/tagid", controller.GetTagIDByArticle)
		}

		// 用户接口
		user := base.Group("/user")
		{
			// 获取用户名
			user.GET("/:id", controller.GetUserName)
		}
	}

	// 需要登录的接口
	base.Use(middleware.AuthLogin)
	{
		// 用户接口
		user := base.Group("/user")
		{
			// 获取用户信息
			user.GET("", controller.GetUserInfo)             // 获取用户信息
			user.PUT("", controller.ModifyUserInfo)          // 修改用户信息
			user.PUT("/password", controller.ModifyPassword) // 修改密码
			user.DELETE("", controller.DeleteUser)           // 删除用户
		}

		comment := base.Group("/comment")
		{
			comment.POST("", controller.PushComment)
			comment.DELETE("/:id")
		}
	}

	base.Use(middleware.VerifyAdmin)
	{
		article := base.Group("/article")
		{
			article.POST("", controller.PushArticle)
			article.PUT("", controller.ModifyArticle)
			article.DELETE("/:id", controller.DeleteArticle)
		}

		tag := base.Group("/tag")
		{
			tag.POST("", controller.CreateTag)
		}

		category := base.Group("/category")
		{
			category.POST("", controller.CreateCategory)
		}
	}
	r.Run(":8080")
}
